package to4.client;

import java.util.ArrayList;

import com.google.gwt.core.client.JsArray;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.visualization.client.DataTable;
import com.google.gwt.visualization.client.Selection;
import com.google.gwt.visualization.client.AbstractDataTable.ColumnType;
import com.google.gwt.visualization.client.events.SelectHandler;
import com.google.gwt.visualization.client.visualizations.Table;

public class MetHome {
	private ContactMet contact = new ContactMet(this);
	private Routeplanner routeplanner = new Routeplanner(this);
	private metWijzigEmailWachtwoord ww = new metWijzigEmailWachtwoord(this);
	private metWijzigVoorkeuren mwv = new metWijzigVoorkeuren(this);
	public TO4 thema;
	private Table chart = new Table();
	private DataTable myData = DataTable.create();
	private int klik = 0;
	private int geselecteerderij;
	private ArrayList<String> emailArray = new ArrayList<String>();
	private String wachtwoord;


	public MetHome(TO4 thema5){
		this.thema = thema5;
	}

	public Panel createPage(final String email){
		AsyncCallback<String> ww = new AsyncCallback<String>(){
			@Override
			public void onFailure(Throwable caught) {
				// TODO Auto-generated method stub
			}
			@Override
			public void onSuccess(String result) {
				wachtwoord = result;

			}
		};
		thema.myService.getWW(email, ww);
		FlowPanel eindPanel = new FlowPanel();

		VerticalPanel menuVertical = new VerticalPanel();

		Label titleLab = new Label("Gegevens");
		titleLab.setStyleName("knownGegevenshomezonder");

		Label standaardNaamLabel = new Label("Naam:");
		standaardNaamLabel.addStyleName("standaardNaamLabel");
		Label standaardGeboorteLabel = new Label("Geboortedatum:");
		standaardGeboorteLabel.addStyleName("standaardNaamLabel");
		Label standaardAdresLabel = new Label("Adres:");
		standaardAdresLabel.addStyleName("standaardNaamLabel");
		Label standaardPostcodeLabel = new Label("Postcode en woonplaats:");
		standaardPostcodeLabel.addStyleName("standaardNaamLabel");
		Label standaardTelefoonnummerLabel = new Label("Telefoonnummer:");
		standaardTelefoonnummerLabel.addStyleName("standaardNaamLabel");
		Label standaarReisreisLabel = new Label("Reizen:");
		standaarReisreisLabel.addStyleName("standaardNaamLabel");
		Label standaardReisRokenLabel = new Label("Roken:");
		standaardReisRokenLabel.addStyleName("standaardNaamLabel");
		Label standaardReisFietsLabel = new Label("Fiets:");
		standaardReisFietsLabel.addStyleName("standaardNaamLabel");
		Label standaardProvincieLabel = new Label("Provincie:");
		standaardProvincieLabel.addStyleName("standaardNaamLabel");

		Label standaardAutoLabel = new Label("Auto:");
		standaardAutoLabel.addStyleName("standaardNaamLabel");
		Label standaardPlaatsen = new Label("Aantal plaatsen beschikbaar:");
		standaardPlaatsen.addStyleName("standaardNaamLabel");
		Label standaardProvinciesRijden = new Label("Rijd door de volgend provincies:");
		standaardProvinciesRijden.addStyleName("standaardNaamLabel");
		Label standaardCommentaar = new Label("Commentaar:");
		standaardCommentaar.addStyleName("standaardNaamLabel");

		final Label naamLabel = new Label("");
		final Label geboorteLabel = new Label("");
		final Label adresLabel = new Label("");
		final Label postcodeLabel = new Label("");
		final Label ProvincieLabel = new Label("");
		final Label telefoonLabel = new Label("");
		final Label ReizenLabel = new Label("");
		final Label RokenLabel = new Label("");
		final Label FietsLabel = new Label("");
		final Label autoLabel = new Label("");
		final Label plaatsenLabel = new Label("");
		final Label rijdProvincieLabel = new Label("");
		final Label commentaarLabel = new Label("");

		AsyncCallback<String> arrayHomeZonder = new AsyncCallback<String>() {

			@Override
			public void onFailure(Throwable caught) {
				// TODO Auto-generated method stub
			}
			@Override
			public void onSuccess(String result) {
				String[] gesplitteResultaat = result.split("\\:\\*\\:");

				naamLabel.setText(gesplitteResultaat[0]);
				geboorteLabel.setText(gesplitteResultaat[1]);
				adresLabel.setText(gesplitteResultaat[2]);
				postcodeLabel.setText(gesplitteResultaat[3]);
				ProvincieLabel.setText(gesplitteResultaat[4]);
				telefoonLabel.setText(gesplitteResultaat[5]);
				ReizenLabel.setText(gesplitteResultaat[6]);
				RokenLabel.setText(gesplitteResultaat[7]);
				FietsLabel.setText(gesplitteResultaat[8]);
				autoLabel.setText(gesplitteResultaat[9]);
				plaatsenLabel.setText(gesplitteResultaat[10]);
				rijdProvincieLabel.setText(gesplitteResultaat[11]);
				commentaarLabel.setText(gesplitteResultaat[12]);
			}

		};
		thema.myService.metHome(email, arrayHomeZonder);

		HorizontalPanel horizon1 = new HorizontalPanel();
		HorizontalPanel horizon2 = new HorizontalPanel();
		HorizontalPanel horizon3 = new HorizontalPanel();
		HorizontalPanel horizon4 = new HorizontalPanel();
		HorizontalPanel horizon5 = new HorizontalPanel();
		HorizontalPanel horizon6 = new HorizontalPanel();
		HorizontalPanel horizon7 = new HorizontalPanel();
		HorizontalPanel horizon8 = new HorizontalPanel();
		HorizontalPanel horizon9 = new HorizontalPanel();
		HorizontalPanel horizon10 = new HorizontalPanel();
		HorizontalPanel horizon11 = new HorizontalPanel();
		HorizontalPanel horizon12 = new HorizontalPanel();
		HorizontalPanel horizon13 = new HorizontalPanel();
		HorizontalPanel horizon14 = new HorizontalPanel();
		HorizontalPanel horizon16 = new HorizontalPanel();
		HorizontalPanel horizon17 = new HorizontalPanel();
		HorizontalPanel horizon18 = new HorizontalPanel();
		HorizontalPanel horizon20 = new HorizontalPanel();
		
		Label mededeling1 = new Label("Als er mensen met u mee rijden dan verschijnt hieronder een tabel met iedereen die met u meerijd, controleer dit regelmatig");
		Label mededeling2 = new Label("Om een persoon uit je auto te verwijderen druk op de persoon in de tabel");
		mededeling1.addStyleName("methomemededeling1");
		mededeling2.addStyleName("methomemededeling2");
		Anchor verwijderAuto = new Anchor("Verwijder auto");
		verwijderAuto.addStyleName("wijzigVoorkeurenGegevenszonder");

		verwijderAuto.addClickHandler(new ClickHandler(){
			@Override
			public void onClick(ClickEvent event) {
				boolean b = Window.confirm("Weet u zeker dat u deze auto wilt verwijderen?");
				if(b == true){
					AsyncCallback<Boolean> verwijderAuto = new AsyncCallback<Boolean>(){
						@Override
						public void onFailure(Throwable caught) {
							// TODO Auto-generated method stub
						}
						@Override
						public void onSuccess(Boolean result) {
							if(result==true){
								Window.alert("Auto succesvol verwijdert");
								thema.sendInlog(email, wachtwoord);

							}
							if(result == false){
								Window.alert("We hebben uw auto niet kunnen verwijderen");
							}
						}
					};
					thema.myService.verwijderAuto(email, verwijderAuto);
				}
			}
		});

		Anchor wijzigVoorkeuren = new Anchor("Wijzig voorkeuren/gegevens");
		wijzigVoorkeuren.addStyleName("wijzigVoorkeurenGegevenszonder");
		Anchor emailwachtwoord = new Anchor("Wijzig E-mailadres");

		wijzigVoorkeuren.addClickHandler(new ClickHandler(){
			@Override
			public void onClick(ClickEvent event) {
				showWijzigVoorkeuren(email);
			}
		});

		emailwachtwoord.addStyleName("wijzigVoorkeurenGegevenszonder");
		emailwachtwoord.addClickHandler(new ClickHandler(){
			@Override
			public void onClick(ClickEvent event) {
				showWijzigWachtwoord(email);
			}
		});

		horizon16.add(verwijderAuto);
		horizon17.add(wijzigVoorkeuren);
		horizon18.add(emailwachtwoord);

		HorizontalPanel empty2 = new HorizontalPanel();
		Label emptyLab2 = new Label("");
		emptyLab2.addStyleName("empty6");
		empty2.add(emptyLab2);

		HorizontalPanel empty3 = new HorizontalPanel();
		Label emptyLab3 = new Label("");
		emptyLab3.addStyleName("empty6");
		empty3.add(emptyLab3);

		HorizontalPanel empty4 = new HorizontalPanel();
		Label emptyLab4 = new Label("");
		emptyLab4.addStyleName("empty6");
		empty4.add(emptyLab3);

		horizon1.add(titleLab);
		horizon2.add(standaardNaamLabel);
		horizon2.add(naamLabel);
		horizon3.add(standaardGeboorteLabel);
		horizon3.add(geboorteLabel);
		horizon4.add(standaardAdresLabel);
		horizon4.add(adresLabel);
		horizon5.add(standaardPostcodeLabel);
		horizon5.add(postcodeLabel);
		horizon6.add(standaardProvincieLabel);
		horizon6.add(ProvincieLabel);
		horizon7.add(standaardTelefoonnummerLabel);
		horizon7.add(telefoonLabel);
		horizon8.add(standaarReisreisLabel);
		horizon8.add(ReizenLabel);
		horizon9.add(standaardReisRokenLabel);
		horizon9.add(RokenLabel);
		horizon10.add(standaardReisFietsLabel);
		horizon10.add(FietsLabel);
		horizon11.add(standaardAutoLabel);
		horizon11.add(autoLabel);
		horizon12.add(standaardPlaatsen);
		horizon12.add(plaatsenLabel);
		horizon13.add(standaardProvinciesRijden);
		horizon13.add(rijdProvincieLabel);
		horizon14.add(standaardCommentaar);
		horizon14.add(commentaarLabel);

		menuVertical.add(horizon1);
		menuVertical.add(horizon2);
		menuVertical.add(horizon3);
		menuVertical.add(horizon4);
		menuVertical.add(horizon5);
		menuVertical.add(horizon6);
		menuVertical.add(horizon7);
		menuVertical.add(empty2);
		menuVertical.add(horizon8);
		menuVertical.add(horizon9);
		menuVertical.add(horizon10);
		menuVertical.add(empty3);
		menuVertical.add(horizon11);
		menuVertical.add(horizon12);
		menuVertical.add(horizon13);
		menuVertical.add(horizon14);
		menuVertical.add(horizon16);
		menuVertical.add(horizon17);
		menuVertical.add(horizon18);
		menuVertical.add(horizon20);

		final Label auto = new Label("");
		horizon20.add(auto);

		if (myData.getNumberOfColumns()==0) {
			myData.addColumn(ColumnType.STRING, "Naam");
			myData.addColumn(ColumnType.STRING, "E-mail");
			myData.addColumn(ColumnType.STRING, "Adres");
			myData.addColumn(ColumnType.STRING, "Postcode");
			myData.addColumn(ColumnType.STRING, "Telefoon");
			myData.addColumn(ColumnType.STRING, "Reizen");
			myData.addColumn(ColumnType.STRING, "Roken");
			myData.addColumn(ColumnType.STRING, "Fiets");
		}
		servercall(email);

		if (klik == 0){
		}  
		chart.addSelectHandler(new SelectHandler() {  
			@Override
			public void onSelect(SelectEvent event) {
				klik++;
				if(klik==1){
					JsArray<Selection> selections = chart.getSelections();
					for (int i = 0; i < selections.length(); i++) {
						Selection selection = selections.get(i);
						geselecteerderij = selection.getRow();
					}
					boolean b = Window.confirm("Weet u zeker dat u deze passagier wilt uitschrijven?");
					if(b == false){
						klik =0;
					}
					if(b == true){
						AsyncCallback<Boolean> verwijderAuto = new AsyncCallback<Boolean>(){
							@Override
							public void onFailure(Throwable caught) {
								// TODO Auto-generated method stub
							}
							@Override
							public void onSuccess(Boolean result) {
								if(result == true){
									Window.alert("verwijderd");
									klik = 0;
									thema.sendInlog(email, wachtwoord);
									servercall(email);
									showHomeMet(email);


								}
								if(result ==false){
									Window.alert("We hebben deze passagier niet kunnen verwijderen, probeer het later nog eens");
									klik = 0;
								}
							}
						};
						thema.myService.verwijderAutoZH(emailArray.get(geselecteerderij), email, verwijderAuto);
						System.out.println(emailArray.get(geselecteerderij));
					}
				}
			}
		});  
		menuVertical.add(mededeling1);
		menuVertical.add(mededeling2);
		menuVertical.add(chart);
		eindPanel.add(menuVertical);
		return eindPanel;
	}

	public void showHomeMet(String email){
		RootPanel.get("container_mid_home").setVisible(true);
		RootPanel.get("container_mid_btm_800").setVisible(true);
		RootPanel.get("wrapper_mid").setVisible(true);
		RootPanel.get("menubarmet").setVisible(true);

		RootPanel.get("container_top").setVisible(false);
		RootPanel.get("container_mid_reg1").setVisible(false);
		RootPanel.get("container_btm").setVisible(false);
		RootPanel.get("menubar").setVisible(false);

		RootPanel.get("container_mid_home").clear();
		RootPanel.get("container_mid_home").add(createPage(email));
	}

	public void showContact(String email){
		RootPanel.get("container_mid_home").setVisible(true);
		RootPanel.get("container_mid_btm_800").setVisible(true);
		RootPanel.get("wrapper_mid").setVisible(true);
		RootPanel.get("menubarmet").setVisible(true);

		RootPanel.get("container_top").setVisible(false);
		RootPanel.get("container_mid_reg1").setVisible(false);
		RootPanel.get("container_btm").setVisible(false);
		RootPanel.get("menubar").setVisible(false);

		RootPanel.get("container_mid_home").clear();
		RootPanel.get("container_mid_home").add(contact.createPage(email));
	}

	public void showRouteplanner(String email){
		RootPanel.get("container_mid_home").setVisible(true);
		RootPanel.get("container_mid_btm_800").setVisible(true);
		RootPanel.get("wrapper_mid").setVisible(true);
		RootPanel.get("menubarmet").setVisible(true);

		RootPanel.get("container_top").setVisible(false);
		RootPanel.get("container_mid_reg1").setVisible(false);
		RootPanel.get("container_btm").setVisible(false);
		RootPanel.get("menubar").setVisible(false);

		RootPanel.get("container_mid_home").clear();
		RootPanel.get("container_mid_home").add(routeplanner.createPage(email));
	}

	public void showWijzigWachtwoord(String email){
		RootPanel.get("container_mid_home").setVisible(true);
		RootPanel.get("container_mid_btm_800").setVisible(true);
		RootPanel.get("wrapper_mid").setVisible(true);
		RootPanel.get("menubarmet").setVisible(true);

		RootPanel.get("container_top").setVisible(false);
		RootPanel.get("container_mid_reg1").setVisible(false);
		RootPanel.get("container_btm").setVisible(false);
		RootPanel.get("menubar").setVisible(false);

		RootPanel.get("container_mid_home").clear();
		RootPanel.get("container_mid_home").add(ww.createPage(email));
	}

	public void showWijzigVoorkeuren(String email){
		RootPanel.get("container_mid_home").setVisible(true);
		RootPanel.get("container_mid_btm_800").setVisible(true);
		RootPanel.get("wrapper_mid").setVisible(true);
		RootPanel.get("menubarmet").setVisible(true);

		RootPanel.get("container_top").setVisible(false);
		RootPanel.get("container_mid_reg1").setVisible(false);
		RootPanel.get("container_btm").setVisible(false);
		RootPanel.get("menubar").setVisible(false);

		RootPanel.get("container_mid_home").clear();
		RootPanel.get("container_mid_home").add(mwv.createPage(email));
	}

	public void servercall(String email){
		AsyncCallback<ArrayList<String>> opvragenAuto2 = new AsyncCallback<ArrayList<String>>(){
			@Override
			public void onFailure(Throwable caught) {
				// TODO Auto-generated method stub
			}
			@Override
			public void onSuccess(ArrayList<String> result) {
				emailArray.clear();
				//Naam, e-mail, adres, postcode,  telefoonnummer ,reizen, roken, fiets
				if (myData.getNumberOfRows() != 0) {
					myData.removeRows(0, myData.getNumberOfRows());
					for(String r:result){
						String[] gesplitteResultaat = r.split("\\:\\*\\:");
						emailArray.add(gesplitteResultaat[1]);
						int rijnummer = myData.addRow();
						for(int i=0; i<8;i++){
							myData.setValue(rijnummer, i, gesplitteResultaat[i]);
						}
						chart.draw(myData);
					}
				}
				if (myData.getNumberOfRows() == 0) {
					for(String r: result){
						String[] gesplitteResultaat = r.split("\\:\\*\\:");
						emailArray.add(gesplitteResultaat[1]);
						int rijnummer = myData.addRow();
						for(int i=0; i<8;i++){
							myData.setValue(rijnummer, i, gesplitteResultaat[i]);
						}
						chart.draw(myData);
					}
				}
				
				if (result.size() == 0){
					chart.removeFromParent();
				}
				if(result.size()!=0) {
					chart.draw(myData);
					chart.addStyleName("vizZH");	
				}

			}
		};
		thema.myService.MetAutoingeschreven(email,opvragenAuto2);
	}
}
